class Solution {
    vector<string> ret;

    void dfs(string s, int l, int r)
    {
        if (!l && !r)
        {
            ret.push_back(s);
            return;
        }
        if (l)     dfs(s + "(", l - 1, r);
        if (r > l) dfs(s + ")", l, r - 1);
    }

public:
    vector<string> generateParenthesis(int n) {
        dfs("", n, n);
        return ret;
    }
};